package com.smart.order.service.impl;


import com.smart.order.entity.Order;
import com.smart.order.entity.OrderItem;
import com.smart.order.mapper.OrderItemMapper;
import com.smart.order.mapper.OrderMapper;
import com.smart.order.reqeust.OrderRequestParams;
import com.smart.order.service.OrderService;
import com.smart.order.utils.OrderUtils;
import com.smart.order.vo.OrderVo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.math.BigDecimal;

/**
 * Shiro   Security
 * 保存订单
 * 订单主表
 * 订单字表
 * 删除购物车
 * <p>
 * 子订单
 */
@Service
public class OrderServiceImpl implements OrderService {

    @Resource
    OrderMapper orderMapper;
    @Resource
    OrderItemMapper orderItemMapper;

    /**
     * 远程调用
     * <p>
     * 认证中心  登录
     * <p>
     * <p>
     * 商品信息  商品ID
     * 唯一性
     * 安全性   20210517
     * 可读性
     * 14 位     16位
     * 分布式锁  分布式事务
     *
     * @return
     */
    @Override
    public OrderVo createOrder(OrderRequestParams orderRequestParams) {
        /**
         * 从购物车表获取商品信息
         */

        /**
         * 用户ID  分布式ID   雪花算法  Long
         * 1. 创建单号  唯一
         * 规则
         * 8位 日期   + 4 用户ID  + 2位 来源   +  6位随机数
         */
        String orderNo = OrderUtils.createOrderSn(1000L, orderRequestParams.getSourceType());
        /**
         * 总金额
         * 1. 已知商品ID
         */

        /**
         * 远程调用
         *  商品服务
         *  商品 List<Inter>  ids
         *  - 检查商品是否下架
         *  - 计算总结
         *  库存服务
         *  通过商品ID 查询库存信息
         *  - 检查库存
         *  减库存
         */
        // 查询商品信息
//        List<ProductDto> products = productService.getProductInfo(orderRequestParams.getProducts());
        // 商品没有下架 没有价格变动
        BigDecimal total = new BigDecimal("0.00");
        orderRequestParams.getProducts().forEach(productRequestParams -> {
            // 单个商品的价格  *   数量
            BigDecimal price = productRequestParams.getPrice();
            BigDecimal quantity = new BigDecimal(productRequestParams.getQuantity());
            total.add(price.multiply(quantity));
            OrderItem orderItem = new OrderItem();
            orderItem.setOrderSn(orderNo);
            // 保存商品的信息
            orderItemMapper.insert(orderItem);
        });

        //库存减少
        /**
         * =============保存订单信息==================
         */
        Order order = new Order();
        /**
         * 2.1  保存地址信息
         */
        order.setReceiverProvince(orderRequestParams.getAddressRequestParam().getReceiverProvince());
        /**
         * 2.2  未支付
         */
        order.setPayType(0);
        order.setTotalAmount(total);
        order.setOrderSn(orderNo);
        order.setSourceType(orderRequestParams.getSourceType());
        //  保存订单
        orderMapper.insert(order);
        OrderVo orderVo = new OrderVo();
        orderVo.setOrderNo(orderNo);
        orderVo.setSubject("smart-" + orderRequestParams.getProducts().get(0).getQuantity());
        orderVo.setTotal(total);
        orderVo.setProducts(orderRequestParams.getProducts());
        // 生成订单号
        // 保存主订单
        // 保存订单字表
        // 减少库存
        // 计算总价呢

        return orderVo;
    }

    /**
     * 检查商品是否下架,商品价格是否发生变动
     *
     * @return
     */
    private boolean checkProduct() {
        return false;
    }
}
